define(function(require, exports, module){
	//require("juicer");
	require("plupload");
	require("qiniu-sdk");//require("qiniu-sdk");
	require("spark-md5");
	require("utils");
//	require("jwplayer");
//	require("jwplayer-html5");
	var service = require("modules/index");
	 
	function initQiniuUpload() {
		var uploader = Qiniu.uploader({
		    runtimes: 'html5,flash,html4',    //上传模式,依次退化
		    browse_button: 'qiniu-upload-btn',       //上传选择的点选按钮，**必需**
		    uptoken_url: contextPath + '/oss/qiniu/token',
		        //Ajax请求upToken的Url，**强烈建议设置**（服务端提供）
		    // uptoken : '<Your upload token>',
		        //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成
		    // unique_names: true,
		        // 默认 false，key为文件名。若开启该选项，SDK会为每个文件自动生成key（文件名）
		    // save_key: true,
		        // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`，则开启，SDK在前端将不对key进行任何处理
		    domain: 'http://7xj5hx.com1.z0.glb.clouddn.com/',
		        //bucket 域名，下载资源时用到，**必需**
		    container: 'qiniu-upload-container',           //上传区域DOM ID，默认是browser_button的父元素，
		    max_file_size: '50mb',           //最大文件体积限制
		    flash_swf_url: contextPath + '/static/thirdparty/plupload-2.1.8/js/Moxie.swf',  //引入flash,相对路径
		    max_retries: 3,                   //上传失败最大重试次数
		    dragdrop: true,                   //开启可拖曳上传
		    drop_element: 'qiniu-upload-container',        //拖曳上传区域元素的ID，拖曳文件或文件夹后可触发上传
		    chunk_size: '4mb',                //分块上传时，每片的体积
		    auto_start: true,                 //选择文件后自动上传，若关闭需要自己绑定事件触发上传
		    init: {
		        'FilesAdded': function(up, files) {
		            plupload.each(files, function(file) {
		                // 文件添加进队列后,处理相关的事情
		            });
		        },
		        'BeforeUpload': function(up, file) {
		               // 每个文件上传前,处理相关的事情
		        },
		        'UploadProgress': function(up, file) {
		               // 每个文件上传时,处理相关的事情
		        },
		        'FileUploaded': function(up, file, info) {
		               // 每个文件上传成功后,处理相关的事情
		               // 其中 info 是文件上传成功后，服务端返回的json，形式如
		               // {
		               //    "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
		               //    "key": "gogopher.jpg"
		               //  }
		               // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html
//		        	{
//		        	    "error":"invalid argument"
//		        	}
			        var res = JSON.parse(info);
			        if (res.error) {
			        	//TODO
			        } else {
			        	console.log(res);
//		               var sourceLink = domain + res.key; // 获取上传成功后的文件的Url
			        	service.saveFile(res.key, res.hash, up.getOption('domain'), file.size, function() {
			        		// Message.success("上传文件成功！", 2);
			        	});
			        }
		        },
		        'Error': function(up, err, errTip) {
		               //上传出错时,处理相关的事情
		        	console.log(err);
		        	console.log(errTip);
		        },
		        'UploadComplete': function() {
		               //队列文件处理完毕后,处理相关的事情
		        },
		        'Key': function(up, file) {
		            // 若想在前端对每个文件的key进行个性化处理，可以配置该函数
		            // 该配置必须要在 unique_names: false , save_key: false 时才生效
		        	var suffix = getFileSuffix(file.name);
		            var key = file.md5 ? (file.md5 + suffix) : (getFileNameWithoutExt(file.name) + "_" + Utils.getCurrTimeStr() + suffix);//guid();
		            console.log(key);
		            return key;
		        }
		    }
		});
		// domain 为七牛空间（bucket)对应的域名，选择某个空间后，可通过"空间设置->基本设置->域名设置"查看获取
		// uploader 为一个plupload对象，继承了所有plupload的方法，参考http://plupload.com/docs		
	}
	
	function guid() {
	    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
	        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
	        return v.toString(16);
	    });
	}
	
	function getFileSuffix(fileName) {
		if (!fileName || fileName.indexOf(".") < 0) {
			return "";
		}
		return fileName.substring(fileName.lastIndexOf("."));
	}
	
	function getFileNameWithoutExt(fileName) {
		if (!fileName || fileName.indexOf(".") < 0) {
			return "";
		}
		return fileName.substring(0, fileName.lastIndexOf("."));
	}
	
	function testVideo() {
		// HLS播放
		//if (/(iPhone|iPad|iPod|iOS|android)/i.test(navigator.userAgent)) { // html5播放
			// oss
			// '<video width="'+width+'" height="'+height+'" controls src="'+dto.playPath+'" />';
			// html5
			//'<video width="'+width+'" height="'+height+'" controls src="'+contextPath+'micro/play?id='+id+'" />';
		//}		
		var jwTarget = jwplayer('videoPlay');
		var jwOpts = {
				flashplayer: contextPath + '/static/thirdparty/jwplayer/6.6/jwplayer.flash.swf',
				//image:contextPath + 'resource/view/img_thumb/'+id+'?size=m',
				primary : 'flash',
				height: 240,
				width: 500
		};
		jwOpts.playlist = [{
			provider : contextPath + '/static/thirdparty/jwplayer/HLSProvider6.swf',
			type : 'hls',
			//image:contextPath + 'resource/view/img_thumb/'+id+'?size=m',
			file : 'http://7xj5hx.com1.z0.glb.clouddn.com/eBQakY0oYjPOjfQC5A77I6J0JqM=/FhvJ0VfhIegZPxCeTXgOkyKnP5ln'
		}];
		var playTime = 0, //播放时间 
		old_time = 0,
		startPlayTime = 0;
		//TODO 历史记录的保存可以暂时做到localStorage中去
		jwOpts.events = {
			onTime: function(eve){
				var time = Math.floor(eve.position);
				if(time == 0) {
					playTime = 0;
					//saveVideoPlayHistory(0);
				}
	            if(time != old_time){
	                playTime++;
	                old_time = time;
	            }	
	            if(playTime > 0 && playTime % 5 == 0) {
	            	//每5秒发送一次记录，记录下播放时间
	            	//saveVideoPlayHistory(playTime);
	            	playTime = 0;
	            }
			},
			onPause: function() {
				if(playTime > 0) {
					//暂停的时候也保存历史记录
					//saveVideoPlayHistory(playTime);
	            	playTime = 0;
				}
			},
			onComplete: function() {
				if(playTime > 0) {
					//saveVideoPlayHistory(playTime);
				}
			}
		};
		jwTarget.setup(jwOpts);		
	}
	
	module.exports = function() {
		initQiniuUpload();
		console.log('init');
		//testVideo();
	}();
});
